package com.insight.modules.system.rule;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang.math.RandomUtils;
import com.insight.common.handler.IFillRuleHandler;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 填值规则Demo：生成订单号
 * 【测试示例】
 */
public class OrderNumberRule implements IFillRuleHandler {

    /**
     * 生成订单号规则的执行方法
     *
     * @param params   规则配置参数，一般来自页面配置（可为空）
     * @param formData 动态表单数据，包含业务相关字段
     * @return 生成的订单号字符串
     */
    @Override
    public Object execute(JSONObject params, JSONObject formData) {
        // 订单号默认前缀为 "CN"
        String prefix = "CN";

        // 如果规则参数中传入了自定义前缀，则覆盖默认前缀
        if (params != null) {
            Object obj = params.get("prefix");
            if (obj != null) prefix = obj.toString();
        }

        // 生成当前时间字符串，格式为年月日时分秒（如20250717173059）
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");

        // 生成一个两位随机数，范围10~99，增强订单号唯一性
        int random = RandomUtils.nextInt(90) + 10;

        // 拼接订单号主体：前缀 + 时间字符串 + 随机数
        String value = prefix + format.format(new Date()) + random;

        // 如果动态表单中传入了 "name" 字段，则附加到订单号后面
        String name = formData.getString("name");
        if (!StringUtils.isEmpty(name)) {
            value += name;
        }

        // 返回最终生成的订单号
        return value;
    }

}

